home *** CD-ROM | disk | FTP | other *** search
/ SGI ONC3 NFS v2 / SGI ONC3 NFS v2.iso / dist6.4 / nfs.idb / var / boot / share_inst.z / share_inst
Text File  |  1997-02-07  |  6KB  |  255 lines

  1. #! /bin/sh
  2. #ident  "$Revision: 1.27 $"
  3. #
  4. #    share_inst
  5. #
  6. umask 022
  7.  
  8. . ./.dl_inst
  9.  
  10. usage()
  11. {
  12.     echo "$CMDNAME: -r release [-d]"
  13.     echo "    -r release:    use release 'release'"
  14.     echo "    -d:        delete the release"
  15.     exit 0
  16. }
  17.  
  18. ACTION="create"
  19. TARGET="share";
  20.  
  21. while [ "$1" != "" ]; do
  22.     case "$1" in
  23.     "-r")
  24.         shift
  25.         RELEASE=$1
  26.         ;;
  27.     "-d")
  28.         ACTION="delete"
  29.         ;;
  30.     *)
  31.         usage;
  32.         ;;
  33.     esac
  34.     shift;
  35. done
  36.  
  37. if [ "$RELEASE" = "" ]; then
  38.     echo "$CMDNAME: ERROR: Release not supplied !\n"
  39.     usage;
  40.     exit 1;
  41. fi;
  42. if [ "$TARGET" = "" ]; then
  43.     echo "$CMDNAME: ERROR: Missing target !\n"
  44.     usage;
  45.     exit 1;
  46. fi;
  47.  
  48. # Simple error checking for RELEASE
  49. if [ ! -f $RELEASE.dat -a ! -l $RELEASE.dat -a ! -d $RELEASE.dat ]; then
  50.     echo "$CMDNAME: ERROR: Invalid release argument."
  51.     if [ `echo $RELEASE | grep "\.dat"` ]; then
  52.         echo "$CMDNAME: Release argument does not need .dat suffix"
  53.     else
  54.         echo "$CMDNAME: $RELEASE.dat file does not exist"
  55.     fi
  56.     exit 1;
  57. fi
  58.  
  59. . $DIR/$RELEASE.dat
  60.  
  61. # For backwards compatibility... just in case
  62. MACH=${CPUBOARD}
  63.  
  64. if [ "$DLMAJOR" = "" ]; then
  65.     DLMAJOR=18
  66. fi
  67.  
  68.  
  69. SHKEY="$DIR/$RELEASE.bpkey"
  70.  
  71. if [ "$NFS_INSTALL" = "yes" ]; then
  72.     echo "Performing share tree install over NFS."
  73. fi
  74.  
  75. #
  76. #
  77.  
  78. if [ "$ACTION" = "delete" ]; then
  79.     poke_host "$RELEASE" "$SERVER_NIS" "$TARGET";
  80.     HOSTSTAT=$?;
  81.     case $HOSTSTAT in
  82.     0)
  83.         echo "Diskless release $RELEASE does not exist"
  84.         echo "Action aborted\n";
  85.         exit 1;
  86.         ;;
  87.     1)
  88.         poke_class "${SHAREHOST}:${SHARE}" "$SERVER_NIS" "delete" "$RELEASE";
  89.         HOSTSTAT=$?;
  90.         if [ "$HOSTSTAT" -eq 1 ]; then
  91.             echo "Action aborted\n";
  92.             exit 1;
  93.         fi;
  94.         ;;
  95.     *)
  96.         echo "share_inst: INTERNAL ERROR $HOSTSTAT"
  97.         exit 1
  98.         ;;
  99.     esac
  100.         if [ ! -d $SHARE ]; then
  101.         echo "$CMDNAME: ERROR: Share tree not exist"
  102.         exit 1;
  103.     fi;
  104.     echo "About to remove shared tree at $SHARE......"
  105.     echo "Enter confirmation (y/Y)\07 :\c"
  106.     read CONF
  107.     if [ "$CONF" != "y" -a "$CONF" != "Y" ]; then
  108.         echo "Action aborted\n";
  109.         exit 1;
  110.     fi;
  111.     if [ "$NFS_INSTALL" != "yes" ]; then
  112.         if [ -f $SHKEY -a "$SERVER_NIS" = "yes" ]; then
  113.             $NIS_EXEC_DIR/yp_bootparam -b -d -h $RELEASE -k $SHKEY;
  114.             rm $SHKEY;
  115.         elif [ "$SERVER_NIS" != "yes" -a -f /etc/bootparams ]; then
  116.             sed -e /\^$RELEASE\ /d /etc/bootparams > /etc/bootparams.tmp
  117.             mv /etc/bootparams.tmp /etc/bootparams
  118.         fi;
  119.     else
  120.         echo "Please remove the entry keyed on: $RELEASE"
  121.         echo "  from the NFS server's bootparams mechanism."
  122.         echo "  This is either the server's bootparams file"
  123.         echo "  or the NIS bootparams map."
  124.     fi
  125.  
  126.     # remove the share tree's /usr and /sbin directories
  127.     unexport_dir class $SHARE/usr $RELEASE
  128.     unexport_dir class $SHARE/sbin $RELEASE
  129.     rm -r $SHARE
  130.  
  131.     exit 0;
  132. fi
  133.  
  134.  
  135. #
  136. # Install.
  137. #
  138. poke_host "$RELEASE" "$SERVER_NIS" "$TARGET";
  139. HOSTSTAT=$?;
  140. case $HOSTSTAT in
  141. 1)
  142.     poke_class "${SHAREHOST}:${SHARE}" "$SERVER_NIS" "$ACTION" "$RELEASE";
  143.     HOSTSTAT=$?;
  144.     if [ "$HOSTSTAT" -eq 1 ]; then
  145.         echo "Action aborted\n";
  146.         exit 1;
  147.     fi;
  148.     ;;
  149. *)
  150.     # do nothing
  151. esac
  152. echo "About to install shared tree at $SHARE......"
  153. echo "Enter confirmation (y/Y)\07:\c"
  154. read CONF
  155. if [ "$CONF" != "y" -a "$CONF" != "Y" ]; then
  156.     echo "Action aborted\n";
  157.     exit 1;
  158. fi
  159. if [ "$HOSTNAME" != "$SHAREHOST" ]; then
  160.     echo "Share tree must be built on host $SHAREHOST"
  161.     exit 1;
  162. fi
  163.  
  164. # Create $SHARE/lib, so /lib/* files can stored as /sbin/lib/* files
  165. if [ ! -d $SHARE/sbin/lib ]; then
  166.     rm -f $SHARE/sbin/lib;
  167.     mkdir -p $SHARE/sbin/lib;
  168. fi
  169. ln -s sbin/lib $SHARE > /dev/null 2>&1
  170.  
  171. # Make /bin a symlink to usr/bin, so /bin/sh will point to something
  172. if [ ! -l $SHARE/bin ]; then
  173.     rm -f $SHARE/bin
  174.     ln -s usr/bin $SHARE/bin
  175. fi
  176.  
  177. # Make /etc a symlink to /sbin, so commands like /etc/mknod will exist
  178. if [ ! -l $SHARE/etc ]; then
  179.     rm -f $SHARE/etc
  180.     ln -s sbin $SHARE/etc
  181. fi
  182.  
  183. # Make /dev/ devices which are required when chroot is done by exitops in inst.
  184. mkdir -p $SHARE/dev > /dev/null 2>&1
  185. mknod $SHARE/dev/null c 1 2 > /dev/null 2>&1
  186. chmod 666 $SHARE/dev/null > /dev/null 2>&1
  187. mknod $SHARE/dev/zero c 37 0 > /dev/null 2>&1
  188. chmod 666 $SHARE/dev/zero > /dev/null 2>&1
  189. mknod $SHARE/dev/usema c 47 1 > /dev/null 2>&1
  190. chmod 777 $SHARE/dev/usema > /dev/null 2>&1
  191. mknod $SHARE/dev/usemaclone c 47 0 > /dev/null 2>&1
  192. chmod 777 $SHARE/dev/usemaclone > /dev/null 2>&1
  193.  
  194. # Create a few directories, so we don't have dangling symlinks.  Delete
  195. # this stuff once we no longer have maint images.
  196. mkdir -p $SHARE/var/spool > /dev/null 2>&1
  197. mkdir -p $SHARE/var/X11/xdm > /dev/null 2>&1
  198.  
  199. SHARED_DIRS="-d usr -d sbin -d lib -d var/share"
  200. if [ "${GFXBOARD}_" = "_" -a "${CPUARCH}_" = "_" -a \
  201.      "${CPUBOARD}_" = "_" -a "${MACH}_" = "_" ]; then
  202.     # Install every architecture
  203.     $INST -r$SHARE -s $INST_OPT -C $SHARED_DIRS
  204. elif [ "${GFXBOARD}_" != "_" -a "${CPUARCH}_" != "_" -a \
  205.        "${CPUBOARD}_" != "_" -a "${MACH}_" != "_" ]; then
  206.     # Install selected architecture
  207.     $INST -r$SHARE -s $INST_OPT $SHARED_DIRS \
  208.         -mCPUARCH=$CPUARCH -mCPUBOARD=$CPUBOARD \
  209.         -mGFXBOARD=$GFXBOARD -mVIDEO=$VIDEO
  210. else
  211.     echo "ERROR: $RELEASE.dat is inconsistent."
  212.     echo "    GFXBOARD, CPUARCH, CPUBOARD must all be set or unset"
  213.     exit 1
  214. fi
  215.  
  216. # Create /var/share if it doesn't exist.  It may be a user created symlink, so
  217. # don't delete.
  218. if [ ! -d $SHARE/var/share ]; then
  219.     mkdir -p $SHARE/var/share
  220. fi
  221.  
  222. # Export /usr and /sbin
  223. echo "Exporting directories ..."
  224. export_share_dir $SHARE/usr ro $RELEASE
  225. export_share_dir $SHARE/sbin ro $RELEASE
  226. export_share_dir $SHARE/var/share rw $RELEASE
  227.  
  228. if [ "$NFS_INSTALL" = "yes" ]; then
  229.      echo "\nPlease put the following line in the NFS server's bootparams file\n"
  230.     echo "    $RELEASE root=$SHAREHOST:$SHARE sbin=$SHAREHOST: swap=$SHAREHOST:\nn"
  231.     echo "    or put it into the NIS bootparams map."
  232.     exit
  233. fi
  234.  
  235. echo "Creating bootparams entries ..."
  236. if [ "$SERVER_NIS" = "yes" ]; then
  237.     if [ -f $SHKEY ]; then
  238.         $NIS_EXEC_DIR/yp_bootparam -d -h $RELEASE -b -k $SHKEY;
  239.         rm $SHKEY
  240.     fi
  241.     $NIS_EXEC_DIR/yp_bootparam -a -h $RELEASE -k $SHKEY -b \
  242.         root=$SHAREHOST:$SHARE \
  243.         sbin=$SHAREHOST: swap=$SHAREHOST:
  244. else
  245.     sed -e /\^$RELEASE\ /d /etc/bootparams > /etc/bootparams.tmp
  246.     mv /etc/bootparams.tmp /etc/bootparams
  247.     echo "$RELEASE root=$SHAREHOST:$SHARE sbin=$SHAREHOST: swap=$SHAREHOST:" >> /etc/bootparams
  248. fi;
  249.  
  250. echo "Done with share tree install.\n"
  251. echo "NOTE: Please read the NFS release notes for additional information"
  252. echo "    which was not included in the administration guide.  As an"
  253. echo "    example, diskless systems require extra configuration with home"
  254. echo "    directories."
  255.